package com.jt.consumer.service;

import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;

/**
 * @FeignClient 注解描述的接口为远程服务调用接口
 *
 * 此接口中我们应该定义这些元素:
 * 1.你要调用的服务是谁?一般用服务名进行标识
 * 2.访问服务中的什么资源?(数据,资源标识是什么?--URL)
 * 3.对服务中的资源进行什么操作?(CRUD-Get,post,put,delete)
 * 4.资源访问不到怎么办?操作资源过程中出现异常怎么办?(预案)
 * 此接口是否需要我们自己写实现类?  (不需要,由底层创建接口实现类,我们只做声明即可)
 * 此接口对应的对象会交给spring管理吗? (会,这个对象是一个代理对象)
 * 此对象的bean名称是什么(假如没有指定,则默认使用name或value属性的值,
 * 推荐基于contextId属性手动指定代理对象been的名字)
 */

//到注册中心找sca-provider服务提供方,代理的bean对象的key是remoteProviderService,
// 用contextId属性指定bean
@FeignClient(name = "sca-provider",
                contextId = "remoteProviderService",
                fallbackFactory = ProviderFallbackFactory.class)
public interface RemoteProviderService {//明修栈道暗渡陈仓

    //Rest风格:通过URI定义资源,通过请求动作操作资源
    @GetMapping("/provider/echo/{msg}")
    String echoMessage(@PathVariable("msg") String msg);

}
